home *** CD-ROM | disk | FTP | other *** search
/ Clickx 115 / Clickx 115.iso / software / tools / windows / tails-i386-0.16.iso / live / filesystem.squashfs / usr / share / perl5 / PPI / Exception.pm < prev    next >
Encoding:
Perl POD Document  |  2010-07-06  |  928 b   |  61 lines

  1. package PPI::Exception;
  2.  
  3. use strict;
  4. use Params::Util qw{_INSTANCE};
  5.  
  6. use vars qw{$VERSION};
  7. BEGIN {
  8.     $VERSION = '1.213';
  9. }
  10.  
  11.  
  12.  
  13.  
  14.  
  15. #####################################################################
  16. # Constructor and Accessors
  17.  
  18. sub new {
  19.     my $class = shift;
  20.     return bless { @_ }, $class if @_ > 1;
  21.     return bless { message => $_[0] }, $class if @_;
  22.     return bless { message => 'Unknown Exception' }, $class;
  23. }
  24.  
  25. sub message {
  26.     $_[0]->{message};
  27. }
  28.  
  29. sub callers {
  30.     @{ $_[0]->{callers} || [] };
  31. }
  32.  
  33.  
  34.  
  35.  
  36.  
  37. #####################################################################
  38. # Main Methods
  39.  
  40. sub throw {
  41.     my $it = shift;
  42.     if ( _INSTANCE($it, 'PPI::Exception') ) {
  43.         if ( $it->{callers} ) {
  44.             push @{ $it->{callers} }, [ caller(0) ];
  45.         } else {
  46.             $it->{callers} ||= [];
  47.         }
  48.     } else {
  49.         my $message = $_[0] || 'Unknown Exception';
  50.         $it = $it->new(
  51.             message => $message,
  52.             callers => [
  53.                 [ caller(0) ],
  54.             ],
  55.         );
  56.     }
  57.     die $it;
  58. }
  59.  
  60. 1;
  61.